The present invention relates to the field of services oriented architecture (SOA) technologies and, more particularly, to SOA software components that endure from prototyping to production.
A SOA produces software implemented business solutions that consist of a set of loosely coupled, black-box software components interoperating to deliver well defined levels of services. That is, services in a SOA serve as an abstraction layer that hide core system implementation from clients and provide a simple loosely coupled way to integrate both service consumer and provider. The coupling is based upon simple XML based messages and open standards that describe the protocol for service discovery and invocation (e.g., UDDI, WSDL, and SOAP). Each interaction among SOA software components is independent of each and every other interaction and the interconnect protocols of the communicating devices upon which the SOA software components execute.
One of the more significant strengths of a SOA architecture is its flexibility and robustness. Software components written in any language, targeted for any platform, and/or adhering to any design methodology can be adapted to conform to SOA requirements, thus becoming SOA components able to be integrated within a SOA solution. For example, legacy code can be “SOA wrapped” and changed into SOA components, which can interact with other software components of a SOA solution. Thus, SOA solutions permit a strong leveraging of existing IT assets. This flexibility is a direct offshoot of the SOA abstraction principle, where underlying implementation specifics of software components are abstracted from other software components.
Poorly designed SOA solutions, like any poorly designed software solution, can result in poor performance, high maintenance costs, upgrade difficulties, and a low quality user experience. These problems are not inherent in a SOA solution, but instead to software solutions in general. In other words, re-packing otherwise inadequate code into SOA components to form an “integrated” SOA solution will result in an inadequate solution. An SOA implementation does not fix underlying flaws with implementation; it instead provides a cohesive framework for permitting loosely coupled software components, which can be distributed across any computing space, to interact using standard communication protocols. Like any other software solution, disciplined adherence to well defined and well documented models, standards, and design principles, produces sound results, while ignoring basic software design principles can result in problematic code.
A SOA development effort can involve software prototyping. Software prototyping can be defined traditionally as a process of creating an incomplete model of a future full featured software program. Advantages of prototyping can include: early evaluation, obtaining feedback early in a development project; being able to determine earlier if proposed software matches a software specification; and providing some insights early on as to whether project timelines and milestones are reasonably likely to be met. Disadvantages of prototyping can include: encouraging development of software with insufficient analysis; user confusion between prototypes and finished system implementations which can result in unrealistic time expectations; extensive development time for a prototype; and an expense of implementing a prototype. Details of the advantages and disadvantages can vary based upon a type of prototyping used, which can include throwaway or rapid prototyping, evolutionary prototyping, incremental prototyping, and the like.